/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package nexus.adec;

import control.MessageFactory;
import control.UserBean;
import java.util.ArrayList;
import java.util.Date;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.el.VariableResolver;
import javax.faces.event.ActionEvent;
import javax.swing.JOptionPane;

/**
 *
 * @author juampi
 */
public class ConfigurarEspacioCurso {
    private ArrayList<ItemCarrera> carreras;
    //private String codigoEspacio;
    private boolean mostrarConfigurarEspacioCurso;
    private String nombreEspacio;
    private String descripcionEspacio;
    private boolean primeraVez;

    public ConfigurarEspacioCurso() {
/*
        codigoEspacio = getUserBean().getCodigoCurso();
        carreras = new ArrayList<ItemCarrera>();
        ArrayList<Carrera> cs = GestorEspacioDB.getInstance().listarCarrerasDocente(getUserBean().getId());
        for (Carrera carrera : cs) {
            ItemCarrera itemC = new ItemCarrera(carrera.getNombreCarrera(), carrera.getCodigoCarrera(),getUserBean().getId(),getUserBean().getCodigoCurso());
            carreras.add(itemC);
        }
     */
    }

    /**
     * @return the carreras
     */
    public ArrayList<ItemCarrera> getCarreras() {
        /*if(codigoEspacio==null) {
            codigoEspacio = getUserBean().getCodigoCurso();
        }
        if(!codigoEspacio.equalsIgnoreCase(getUserBean().getCodigoCurso())){
            carreras = new ArrayList<ItemCarrera>();
            ArrayList<Carrera> cs = GestorEspacioDB.getInstance().listarCarrerasDocente(getUserBean().getId());
            for (Carrera carrera : cs) {
                ItemCarrera itemC = new ItemCarrera(carrera.getNombreCarrera(), carrera.getCodigoCarrera(),getUserBean().getId(),getUserBean().getCodigoCurso());
                carreras.add(itemC);
            }
            codigoEspacio = getUserBean().getCodigoCurso();
        }*/
        if(mostrarConfigurarEspacioCurso) {
            if(primeraVez) {
                carreras = new ArrayList<ItemCarrera>();
                ArrayList<Carrera> cs = GestorEspacioDB.getInstance().listarCarrerasDocente(getUserBean().getId());
                for (Carrera carrera : cs) {
                    ItemCarrera itemC = new ItemCarrera(carrera.getNombreCarrera(), carrera.getCodigoCarrera(),getUserBean().getId(),getUserBean().getCodigoCurso());
                    itemC.setPrimeraVez(true);
                    carreras.add(itemC);
                }
                primeraVez = false;
                //JOptionPane.showMessageDialog(null, "entro al primera ves en el configurar espacio de curso");
            }
        }
        return carreras;
    }

    /**
     * @param carreras the carreras to set
     */
    public void setCarreras(ArrayList<ItemCarrera> carreras) {
        this.carreras = carreras;
    }
    public UserBean getUserBean() {
        FacesContext context = FacesContext.getCurrentInstance();
        VariableResolver vr = context.getApplication().getVariableResolver();
        UserBean ub =(UserBean) vr.resolveVariable(context, "userBean");
        return ub;
    }
    public void actionGuardarAsignacion(ActionEvent event) {
        /*
        ArrayList<GrupoAcademico> grupos = new ArrayList<GrupoAcademico>();
        ArrayList<ItemCarrera> carreras = getCarreras();
        for (ItemCarrera itemCarrera : carreras) {
            for (ItemMateria itemMateria : itemCarrera.getMaterias()) {
                for (itemGrupo itemGrupo : itemMateria.getGrupos()) {
                    if(itemGrupo.isSeleccionado()) {
                       // JOptionPane.showMessageDialog(null, "cod Carr "+itemCarrera.getCodigoCarrera()+" cod mat "+itemMateria.getCodigoMateria()+" cod grup "+itemGrupo.getNombreGrupo());
                        GrupoAcademico g = new GrupoAcademico(itemCarrera.getCodigoCarrera(), itemMateria.getCodigoMateria(), itemGrupo.getNombreGrupo());
                        grupos.add(g);
                    }
                }
            }
        }
        //GrupoAcademico g = new GrupoAcademico(, codigoMateria, numeroGrupo)

        GestorEspacioDB.getInstance().asignarDatosEspacio(getUserBean().getCodigoCurso(), grupos);
        mostrarConfigurarEspacioCurso = false;
        FacesMessage mensaje;
        if(grupos.size()>0) {
             mensaje= MessageFactory.createMessage(FacesMessage.SEVERITY_ERROR,"configuracionCorrectaEspacioCurso", "");
        }else {
            mensaje = MessageFactory.createMessage(FacesMessage.SEVERITY_ERROR,"mensajeSeleccionGrupo", "");
        }
        FacesContext.getCurrentInstance().addMessage(null, mensaje);
        */
    }

    /*
    public String getCodigoEspacio() {
        return codigoEspacio;
    }

     
    public void setCodigoEspacio(String codigoEspacio) {
        this.codigoEspacio = codigoEspacio;
    }

    */
    /**
     * @return the mostrarConfigurarEspacioCurso
     */
    public boolean isMostrarConfigurarEspacioCurso() {
        return mostrarConfigurarEspacioCurso;
    }

    /**
     * @param mostrarConfigurarEspacioCurso the mostrarConfigurarEspacioCurso to set
     */
    public void setMostrarConfigurarEspacioCurso(boolean mostrarConfigurarEspacioCurso) {
        this.mostrarConfigurarEspacioCurso = mostrarConfigurarEspacioCurso;
    }

    /**
     * @return the nombreCurso
     */
    public String getNombreCurso() {
        return getNombreEspacio();
    }

    /**
     * @param nombreCurso the nombreCurso to set
     */
    public void setNombreCurso(String nombreCurso) {
        this.setNombreEspacio(nombreCurso);
    }

    /**
     * @return the descripcionCurso
     */
    public String getDescripcionCurso() {
        return getDescripcionEspacio();
    }

    /**
     * @param descripcionCurso the descripcionCurso to set
     */
    public void setDescripcionCurso(String descripcionCurso) {
        this.setDescripcionEspacio(descripcionCurso);
    }
    public String crearEspacioCurso() {
        //String res="irAConfiguracionEspacioCurso";
        String res = "irAEspacio";
        FacesContext facesContext = FacesContext.getCurrentInstance();
        VariableResolver vr = facesContext.getApplication().getVariableResolver();
        UserBean user = (UserBean)vr.resolveVariable(facesContext, "userBean");
        Usuario u = GestorEspacioDB.getInstance().obtenerUsuario(user.getId());
        //Materia mat = GestorEspacioDB.getInstance().obtenerMateria(codigoMateria);
        //Modalidad mod = new Modalidad(codigoModalidad, "", "");
        

        ArrayList<GrupoAcademico> grupos = new ArrayList<GrupoAcademico>();
        ArrayList<ItemCarrera> carreras = getCarreras();
        for (ItemCarrera itemCarrera : carreras) {
            for (ItemMateria itemMateria : itemCarrera.getMaterias()) {
                for (itemGrupo itemGrupo : itemMateria.getGrupos()) {
                    if(itemGrupo.isSeleccionado()) {
                       // JOptionPane.showMessageDialog(null, "cod Carr "+itemCarrera.getCodigoCarrera()+" cod mat "+itemMateria.getCodigoMateria()+" cod grup "+itemGrupo.getNombreGrupo());
                        GrupoAcademico g = new GrupoAcademico(itemCarrera.getCodigoCarrera(), itemMateria.getCodigoMateria(), itemGrupo.getNombreGrupo());
                        grupos.add(g);
                    }
                }
            }
        }
        //GrupoAcademico g = new GrupoAcademico(, codigoMateria, numeroGrupo)

        
        FacesMessage mensaje;
        if(grupos.size()>0) {


            if(getNombreEspacio().trim().length()<4){
                FacesContext faces=FacesContext.getCurrentInstance();
                mensaje=new FacesMessage("El nombre del espacio debe contener minimamente 5 caracteres","El nombre del espacio debe contener minimamente 4 caracteres");
                faces.addMessage(null, mensaje);
                return "#";
            }
            EspacioCurso curso = new EspacioCurso(getNombreEspacio().toUpperCase(), new Date(),getDescripcionEspacio());
            String codigoEsp = GestorEspacioDB.getInstance().crearEspacioCurso(u, curso);
            if((codigoEsp.compareTo("")==0)){
                //JOptionPane.showMessageDialog(null, "entro al if del eror en configurarEspaciCurso");
                String cadenaMensaje = "No se pudo crear el espacio de curso para "+u.getNombreCompleto()+" en este espacio personal por que ya existe un espacio de curso con el mismo nombre";
                res ="#";
                FacesMessage message = new FacesMessage(cadenaMensaje,cadenaMensaje);
                FacesContext.getCurrentInstance().addMessage(null, message);
            }else {
                //JOptionPane.showMessageDialog(null,"entro al else bien en configurarEspacioCurso");
                GestorEspacioDB.getInstance().asignarDatosEspacio(codigoEsp, grupos);
                mostrarConfigurarEspacioCurso = false;
                setNombreEspacio("");
                setDescripcionEspacio("");
            }
            user.setCodigoCurso(codigoEsp);
            mensaje= MessageFactory.createMessage(FacesMessage.SEVERITY_ERROR,"configuracionCorrectaEspacioCurso", "");
        }else {
            mensaje = MessageFactory.createMessage(FacesMessage.SEVERITY_ERROR,"mensajeSeleccionGrupo", "");
            res = "#";
        }
        FacesContext.getCurrentInstance().addMessage(null, mensaje);

        return res;
    }

    public void actionMostrarOpcionConfiguracion(ActionEvent event) {
        mostrarConfigurarEspacioCurso = true;
        primeraVez = true;

        ArrayList<EspacioCurso> espacios = GestorEspacioDB.getInstance().listarCursos(getUserBean().getId());
        for (EspacioCurso espacioCurso : espacios) {
            if(espacioCurso.getNombreEspacio().equalsIgnoreCase(nombreEspacio)) {
                mostrarConfigurarEspacioCurso = false;
                FacesMessage mensaje = new FacesMessage("Ese nombre de espacio ya esta registrado, ingrese otro","Ese nombre de espacio ya esta registrado, ingrese otro");
                FacesContext.getCurrentInstance().addMessage(null, mensaje);
            }
        }
    }

    /**
     * @return the nombreEspacio
     */
    public String getNombreEspacio() {
        return nombreEspacio;
    }

    /**
     * @param nombreEspacio the nombreEspacio to set
     */
    public void setNombreEspacio(String nombreEspacio) {
        this.nombreEspacio = nombreEspacio;
    }

    /**
     * @return the descripcionEspacio
     */
    public String getDescripcionEspacio() {
        return descripcionEspacio;
    }

    /**
     * @param descripcionEspacio the descripcionEspacio to set
     */
    public void setDescripcionEspacio(String descripcionEspacio) {
        this.descripcionEspacio = descripcionEspacio;
    }

    /**
     * @return the primeraVez
     */
    public boolean isPrimeraVez() {
        return primeraVez;
    }

    /**
     * @param primeraVez the primeraVez to set
     */
    public void setPrimeraVez(boolean primeraVez) {
        this.primeraVez = primeraVez;
    }
}
